0%

Apache Lucene 评分简介

我也是不很懂,算是给自己扫盲吧。
😂 😂 😂 😂 😂 😂 😂 😂 😂 😂 😂 😂

当谈到查询及其相关性,我们不能忽略得分以及它从哪里来。但得分是什么?得分是描述文档与查询相关度的一个参数。本节将讨论Apache Lucene的默认评分机制:TF/IDF算法,看看它如何影响返回的文档。

TF/IDF算法不是Elasticsearch公开的唯一可用的算法。

当文档被匹配时

Lucene返回文档时,意味着文档与我们发送的查询匹配,并且对该文档已给出一个分数。得分越高,从搜索引擎的角度来看文档越相关。然而,两个不同的查询将对同一文档计算出不同的分数。正因为如此,在查询之间比较分数通常没什么意义。我们回到评分这个话题。计算文档的评分属性时,考虑以下因素:

  • 文档加权:对文档建立索引时,对文档的加权值。
  • 字段加权:查询和索引时,对字段的加权值。
  • 协调:基于文档词条数的协调因子。对包含更多查询词条的文档,它提供更大的值。
  • 逆文档频率:基于词条的因子,它告诉评分公式,给定词条出现的频率有多低。逆文档频率越高,词条越罕见。
  • 长度规范:基于字段的规范化因子,它基于给定字段包含的词条数目。字段越长,该因子给的加权值越小。这基本上意味着更短的文档更受分数的青睐。
  • 词频:基于词条的因子,描述给定词条在文档中出现的次数,词频越高,文档的得分越高。
  • 查询规范:基于查询的规范化因子,由每个查询词条比重的平方之和计算而成。查询规范用于查询之间的得分比较,但这并不一定很容易,有时甚至做不到。

默认评分公式

TF/IDF算法的实用计算公式如下:

为了调整查询相关性,你不需要记住这个等式的细节,但至少要知道它是如何工作的。我们可以看到,文档的评分因子是查询q和文档d的一个函数。还有两个不直接依赖于查询词条的因子,coord和queryNorm。公式中这两个元素跟查询中的每个词计算而得的总和相乘。另一方面,该总和由给定词的词频、逆文档频率、词条加权和规范相乘而来,其中的规范就是我们前面讨论过的长度规范。

注意前面的公式是实用性的,你可以在Lucene Javadocs中查看更多概念公式的信息,网址是:
http://lucene.apache.org/core/4_7_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html

上述规则的好处是,你不需要记住全部内容。应该知道的是影响文档评分的因素。下面是一些派生自上述等式的规则:

  • 匹配的词条越罕见,文档的得分越高;
  • 文档的字段越小,文档的得分越高;
  • 字段的加权越高,文档的得分越高;
  • 我们可以看到,文档匹配的查询词条数目越高、字段越少(意味着索引的词条越少),Lucene给文档的分数越高。同时,罕见词条比常见词条更受评分的青睐。

相关性的意义

在大多数情况下,我们希望得到最匹配的文档,但最相关的不一定是最匹配的。一些用例定义了非常严格的规则,规定了某些文档应该在结果列表中排位靠前。例如,文档除了被TF/IDF相似度模型完美匹配外,有客户付钱让他们的文档出现在结果中更靠前的位置。基于客户计划,我们想给这样的文档更大的重要性,把付费最高的用户的文档放到搜索结果的最顶部。当然,这就不属于TF/IDF相关性了。

在进行搜索相关性方面的工作时,你应该永远记住,这不是一次性的过程。随着时间的推移,你的数据将改变,查询也需要相应调整。在大多数情况下,优化查询相关性是持续性的工作,要根据业务规则、需求以及用户行为方式等调整。有一点非常重要:记住这不是设置之后就可以抛诸脑后的一次性过程。

补充

从Elasticsearch 5之后, 缺省的打分机制改成了Okapi BM25, 它也是基于TF/IDF进化来的。

TF/IDF与BM25的相同点

TF/IDF和BM25同样使用逆向文档频率来区分普通词(不重要)和非普通词(重要),同样认为:

  • 文档里的某个词出现次数越频繁,文档与这个词就越相关,得分越高。
  • 某个词在集合所有文档里出现的频率是多少?频次越高,权重越低,得分越低。某个词在集合中所有文档中越罕见,得分越高。

TF/IDF与BM25的不同点

BM25在传统TF/IDF的基础上增加了几个可调节的参数,使得它在应用上更佳灵活和强大,具有较高的实用性。

  • 传统的TF值理论上是可以无限大的。而BM25与之不同,它在TF计算方法中增加了一个常量k,用来限制TF值的增长极限。
  • BM25还引入了平均文档长度的概念,单个文档长度对相关性的影响力与它和平均长度的比值有关系。

本文整理自:《Elasticsearch服务器开发(第2版)》 ,补充部分整理自网络。

欢迎关注我的其它发布渠道